package com.example.jn_dxs.Ui.activity;

import androidx.recyclerview.widget.RecyclerView;

import android.graphics.Color;
import android.graphics.Typeface;
import android.os.Build;
import android.view.LayoutInflater;
import android.view.View;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.example.jn_dxs.Base.BaseActivity;
import com.example.jn_dxs.Base.BaseViewModel;
import com.example.jn_dxs.Bean.PopuBean;
import com.example.jn_dxs.R;
import com.example.jn_dxs.Ui.adapter.PopuAdapter;
import com.example.jn_dxs.Utlis.PopWindowUtil;
import com.example.jn_dxs.Utlis.xFormatter;
import com.example.jn_dxs.ViewModel.StatisticsVM;
import com.example.jn_dxs.view.MarkerViews;
import com.example.jn_dxs.databinding.ActivityWaterTemperatureTrendBinding;
import com.github.mikephil.charting.animation.Easing;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.LimitLine;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
import com.github.mikephil.charting.formatter.ValueFormatter;

import java.util.ArrayList;
import java.util.List;

import me.jessyan.autosize.internal.CancelAdapt;

public class WaterTemperatureTrendActivity extends BaseActivity<StatisticsVM, ActivityWaterTemperatureTrendBinding> implements CancelAdapt {

    private ArrayList<String> Xvalue = new ArrayList<>();
    private ArrayList<Entry> Yvalue = new ArrayList<>();
    private LineDataSet set1;

    private View MPopuView;
    private RecyclerView PopuRecyc;
    private PopuAdapter adapter;
    private List<PopuBean> list = new ArrayList<>();

    @Override
    protected int getLayoutId() {
        return R.layout.activity_water_temperature_trend;
    }

    @Override
    protected void initEventAndView() {
        binding.MyTopBar.tvBack.setOnClickListener(v -> finish());
        binding.MyTopBar.tvTitle.setText("水温统计");
        binding.MyTopBar.tvRight.setVisibility(View.VISIBLE);
//        binding.MyTopBar.tvRight.setText("辛电11老");
//        binding.MyTopBar.tvRight.setOnClickListener(v -> {
//            PopWindowUtil.getInstance(this).popupCrater(binding.IV,MPopuView,binding.MyTopBar.tvRight);
//        });
//
//        MPopuView = LayoutInflater.from(this).inflate(R.layout.pop_xiangshang_view, null, false);
//        PopuRecyc = MPopuView.findViewById(R.id.tv_record);
//        adapter = new PopuAdapter(R.layout.item_popupview);
//        PopuRecyc.setAdapter(adapter);
//        adapter.setListenter((view, popuBean, pos) -> {
//            binding.MyTopBar.tvRight.setText(popuBean.getName());
//            PopWindowUtil.getInstance(this).setDismiss();
//        });
//
//        for (int i=0;i<10;i++){
//            list.add(new PopuBean("辛电1"+i+"老",i+""));
//        }
//        adapter.setNewData(list);
//        data();

        if (!getIntent().getStringExtra("id").isEmpty()) {
            model.getDetail(getIntent().getStringExtra("id"));
        }
    }

    @Override
    public void initClick() {

    }

    private void data() {
        Yvalue.add(new Entry(0, 70));
        Xvalue.add("2010年");
        Yvalue.add(new Entry(1, 73));
        Xvalue.add("2011年");
        Yvalue.add(new Entry(2, 76));
        Xvalue.add("2012年");
        Yvalue.add(new Entry(3, 69));
        Xvalue.add("2013年");
        Yvalue.add(new Entry(4, 73));
        Xvalue.add("2014年");
        Yvalue.add(new Entry(5, 77));
        Xvalue.add("2015年");
        Yvalue.add(new Entry(6, 72));
        Xvalue.add("2016年");
        Yvalue.add(new Entry(7, 77));
        Xvalue.add("2017年");
        Yvalue.add(new Entry(8, 71));
        Xvalue.add("2018年");
        Yvalue.add(new Entry(9, 74));
        Xvalue.add("2019年");
        setChartDate(Yvalue, "水温", 0f, false);
    }

    private void setChartDate(ArrayList<Entry> value, String label, float Cordon, boolean IsShow) {
        setChartProperties();
        setChartXAxis(new xFormatter(Xvalue), Xvalue.size());
        setChartYAxis(Cordon, IsShow);

        set1 = new LineDataSet(value, label);
        set1.setColor(Color.parseColor("#FFFF5722"));
        set1.setCircleColor(Color.parseColor("#FFFF5722"));
        set1.setValueTextColor(Color.parseColor("#FFFF5722"));
        set1.setLineWidth(1f);//设置线宽
        set1.setCircleRadius(3f);//设置焦点圆心的大小
        set1.enableDashedHighlightLine(10f, 5f, 0f);//点击后的高亮线的显示样式
        //set1.setHighlightLineWidth(2f);//设置点击交点后显示高亮线宽
        set1.setHighlightEnabled(true);//是否禁用点击高亮线
        set1.setHighLightColor(Color.RED);//设置点击交点后显示交高亮线的颜色
        set1.setValueTextSize(9f);//设置显示值的文字大小
        set1.setDrawFilled(false);//设置禁用范围背景填充

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
            //设置渐变
            //设置渐变
            set1.setFillColor(Color.parseColor("#0E7AD4"));
        } else {
            set1.setFillColor(Color.parseColor("#0E7AD4"));
        }
        LineData lineData = new LineData(set1);
        binding.LineChart.setData(lineData);
        binding.LineChart.invalidate();
    }

    private void setChartXAxis(ValueFormatter xValueFormatter, int size) {
        XAxis xAxis = binding.LineChart.getXAxis();
        xAxis.setLabelRotationAngle(45);
        //设置字体大小
        xAxis.setTextSize(7f);
        xAxis.setTextColor(Color.parseColor("#000000"));
        //设置从x轴发出的横线
        xAxis.enableGridDashedLine(10f, 10f, 0f);
        xAxis.setDrawGridLines(true);
        xAxis.setGridColor(Color.parseColor("#000000"));
        //设置网格线宽度
        xAxis.setGridLineWidth(1);
        //设置显示X轴
        xAxis.setDrawAxisLine(true);
        //设置X轴显示的位置
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        //设置自定义X轴值
        xAxis.setValueFormatter(xValueFormatter);
        //一个界面显示6个Lable，那么这里要设置11个
        xAxis.setLabelCount(size - 1);
        //设置最小间隔，防止当放大时出现重复标签
        xAxis.setGranularity(1f);
        //设置为true当一个页面显示条目过多，X轴值隔一个显示一个
        xAxis.setGranularityEnabled(true);
        //设置X轴的颜色
        xAxis.setAxisLineColor(Color.parseColor("#000000"));
        //设置X轴的宽度
        xAxis.setAxisLineWidth(1f);
        xAxis.setTypeface(Typeface.DEFAULT);
        // lineChart.invalidate();
    }

    private void setChartYAxis(float Cordon, boolean IsShow) {
        //获取右边的轴线
        YAxis rightAxis = binding.LineChart.getAxisRight();
        //设置图表右边的y轴禁用
        rightAxis.setEnabled(false);
        //获取左边的轴线
        YAxis leftAxis = binding.LineChart.getAxisLeft();
        leftAxis.setTextColor(Color.parseColor("#000000"));
        leftAxis.setAxisLineColor(Color.parseColor("#000000"));
        //设置网格线为虚线效果
        leftAxis.enableGridDashedLine(10f, 10f, 0f);
        leftAxis.setDrawGridLines(true);
        leftAxis.setGridColor(Color.parseColor("#000000"));
        //是否绘制0所在的网格线
        leftAxis.setDrawZeroLine(true);
        if (IsShow) {
            //可以设置一条警戒线，如下：
            leftAxis.removeAllLimitLines();
            LimitLine ll = new LimitLine(Cordon, "警戒线");//第一个参数是警戒值，Y轴
            ll.setLineColor(Color.RED);
            ll.setLineWidth(1f);
            ll.setTextColor(Color.RED);
            ll.setTextSize(10f);
            // .. and more styling options
            leftAxis.addLimitLine(ll);
        }
    }

    private void setChartProperties() {
        //设置图表属性
        //设置描述文本不显示
        binding.LineChart.getDescription().setEnabled(false);
        //设置是否可以触摸
        binding.LineChart.setTouchEnabled(true);
        binding.LineChart.setDragDecelerationFrictionCoef(0.9f);
        //设置是否可以拖拽
        binding.LineChart.setDragEnabled(true);
        //设置是否可以缩放
        binding.LineChart.setScaleEnabled(true);
        binding.LineChart.setHighlightPerDragEnabled(true);
        binding.LineChart.setPinchZoom(true);
        binding.LineChart.setDrawGridBackground(false); // 是否显示表格填充颜色
        // lineChart.setGridBackgroundColor(Color.WHITE & 0x70FFFFFF);//设置表格填充颜色
        binding.LineChart.setHighlightPerTapEnabled(true);
        //点击交叉点弹出Y轴对比数据的关键代码调用，调用的是重写MarkerView的MarkerViews类。
        final MarkerViews mv = new MarkerViews(this,
                R.layout.maekertextview, binding.LineChart, Xvalue, "水温：");
        mv.setChartView(binding.LineChart);
        // set the marker to the chart
        binding.LineChart.setMarker(mv);
        //设置背景颜色
        binding.LineChart.setBackgroundColor(Color.parseColor("#CAE6F2"));
        //设置一页最大显示个数为6，超出部分就滑动
//        float ratio = (float) values1.size()/(float) 12;
        //显示的时候是按照多大的比率缩放显示,1f表示不放大缩小
        binding.LineChart.zoom(1f, 1f, 0, 0);
        //设置从X轴出来的动画时间
        //mLineChart.animateX(1500);
        //设置XY轴动画
        binding.LineChart.animateXY(1500, 1500, Easing.EaseInSine, Easing.EaseInSine);
        /***折线图例 标签 设置***/
        Legend legend = binding.LineChart.getLegend();
        legend.setForm(Legend.LegendForm.LINE);
        legend.setTextSize(11f);
        legend.setTextColor(Color.parseColor("#FFFF5722"));
        //显示位置
        legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
        legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
        legend.setOrientation(Legend.LegendOrientation.HORIZONTAL);
        //是否绘制在图表里面
        legend.setDrawInside(false);
        //不显示表边框
        binding.LineChart.setDrawBorders(false);
    }

    @Override
    protected void onObjectDataChange(JSONObject object) {
        super.onObjectDataChange(object);
        JSONObject dtgcjbqkList = object.getJSONObject("dtgcjbqkList");
        JSONArray sweis = object.getJSONArray("sweis"); //位
        JSONArray swens = object.getJSONArray("swens");  //温
        JSONArray szs = object.getJSONArray("szs");


        if (!swens.isEmpty() && swens.size() > 0 && dtgcjbqkList != null) {
            binding.MyTopBar.tvRight.setText( dtgcjbqkList.getString("pkiaa"));
            for (int i = 0; i < swens.size(); i++) {

                Yvalue.add(new Entry(i, swens.getJSONObject(i).getFloatValue("sw")));
                Xvalue.add(swens.getJSONObject(i).getString("endjcsj"));
            }
            Yvalue.add(new Entry(0, 70));
            Xvalue.add("2010年");
            Yvalue.add(new Entry(1, 73));
            Xvalue.add("2011年");
            Yvalue.add(new Entry(2, 76));
            Xvalue.add("2012年");
            Yvalue.add(new Entry(3, 69));
            setChartDate(Yvalue, "水温", 0f, false);
        }
    }
}
